終於來到最後一天,在這個過程當中,發現要寫一篇文章真的不簡單,不僅文章的架構,資源重整等等
看源碼來證實自己的思路是正確,其實花費的時間是需要很多的,但也這樣也讓自己有成長,我很慶幸有參加鐵人賽
本來預期寫的文章是想更多及深入的,基於時間有限和準備不夠充足無法在短時間內準備齊全
若後續有新的觀點依然會進行更新文章,對我來說程式語言就是 keep going 不斷的學習,
這也是我很自傲自己一直堅持努力的地方,在過去未參賽的過程,看開源的 package 都需要花上很多時間去理解,無法像在 php 語言上那麼得心應手,經過這次發現理解速度變快了,這些撞牆過程,其實是蠻享受的,自己期許為來在 golang 發表的文章就朝向底層
上個章節有提到 性能測試 func 名稱前綴 Benchmark
package main
import "strings"
//切割字串
//example:
//abc b=>[a c]
func Split(str, sep string) []string {
var ret []string
index := strings.Index(str, sep)
for index > 0 {
ret = append(ret, str[:index])
str = str[index+1:]
index = strings.Index(str, sep)
}
return ret
}
package main
import "testing"
func BenchmarkSplit(b *testing.B) {
for i := 0; i < b.N; i++ {
Split("a:b:c", ":")
}
}
使用指令 go test -bench=Split
從上圖可以看出
package main
import "strings"
//切割字串
//example:
//abc b=>[a c]
func Split(str, sep string) []string {
var ret = make([]string, 0, strings.Count(str, sep)+1)
index := strings.Index(str, sep)
for index > 0 {
ret = append(ret, str[:index])
str = str[index+1:]
index = strings.Index(str, sep)
}
return ret
}
再次測試發現申請記憶體次數減少至 1 次
每次花費時間減少至 156 ns/op